<?php

namespace App\Http\Controllers\Home;

use App\models\Order;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

require_once  public_path() ."/org/wxpay_php_sdk_v3.0.9/example/WxPay.NativePay.php";
class PayController extends Controller
{
    public function index($order_num,Order $order)
    {
//       根据订单编号找到订单表中详细的订单信息
        $orders = $order->where('order_num',$order_num)->first();
//        微信扫码支付，代码位置：phpsdk/example/notify.php
        //include加载文件的路径
        //修改了SetBody和SetNotify_url方法
        //注意config/app.php中的时区
        //配置项文件参数设置:example/WxPay.Config.php中:appid MCHID appsecret key
        $input = new \WxPayUnifiedOrder();
        //设置附加数据,在这携带订单号
        $input->SetBody("优生活订单支付");
        //设置附加数据,在这携带订单号
        $input->SetAttach($order_num);
        $input->SetOut_trade_no("sdkphp123456789".date("YmdHis"));
        $input->SetTotal_fee("1");
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag("test");
//        $input->SetNotify_url("http://paysdk.weixin.qq.com/notify.php");
        $input->SetNotify_url(route('home.wxPayResult'));
        $input->SetTrade_type("NATIVE");
        $input->SetProduct_id("123456789");

        $notify = new \NativePay();
        $result = $notify->GetPayUrl($input);
        //dd($result);
        $url2 = $result["code_url"];

        return view('home.pay_index',compact('orders','url2'));
    }

    //微信异步通知回调地址,注意这个方法需要支付成功之后让微信通知
    //设置csrf白名单,将wxPayResult路由排除(不需要csrf令牌验证)
    public function wxPayResult(){
        //这句测试微信支付成功之后是否正常运行
        //file_put_contents('a.php',1);
        //接受微信推送给我们数据
        $content = file_get_contents('php://input');
        $res = simplexml_load_string($content,'simpleXmlElement',LIBXML_NOCDATA);
        //将该数据写入到文件中查看
        file_put_contents('a.php',var_export($res,true));
        //判断支付成功
        if($res->result_code=='SUCCESS' && $res->return_code == 'SUCCESS'){
            file_put_contents('b.php',var_export($res,true));
            //修改我们自己数据表中订单状态
            Order::where('order_num',$res->attach)->update(['status'=>'已付款']);
            //返回给微信数据xml数据包,告诉微信不需要再通知我了
            $xml = '<xml>
   <return_code><![CDATA[SUCCESS]]></return_code>
   <return_msg><![CDATA[OK]]></return_msg>
   </xml>';
            echo $xml;
            return true;
        }
    }
    //异步检测订单是否已支付
    public function checkOrderStatus(Request $request){
        //接收异步请求的订单号
        $order_num = $request->order_num;
        //根据订单号查询订单状态
        $orders = Order::where('order_num',$order_num)->first();
        if($orders['status'] != '未付款'){
            //说明已付款
            return ['code'=>1,'msg'=>'已经付款'];
        }else{
            //说明未付款
            return ['code'=>0,'msg'=>'未支付'];
        }
    }
}
